package com.leetcode.no48;

//自外向内一共有不超过 n/2n/2 层（单个中心元素不算一层）矩形框。
// 对于第 stimes 层矩形框，其框边长 len=nums−(times∗2)，
// 将其顺时针分为 4 份 len−1 的边，对四条边进行元素的循环交换即可。
//


//方法 2：两次翻转
//先沿右上 - 左下的对角线翻转（270°  一次镜像），再沿水平中线上下翻转（−180°+ 一次镜像），
// 可以实现顺时针 90 度的旋转效果
//
public class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n; i++) {
            // 每一个旋转的中点

        }
    }

    public void rotate02(int[][] matrix) {
        int n = matrix.length;
        if (n < 1 || n != matrix[0].length) {
            return;
        }

        // 先以对角线（左上-右下）为轴进行翻转
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++) {
                swap(matrix, i, j, j, i);
            }
        }

        // 再对每一行以中点进行翻转
        int mid = n / 2;
        for (int i = 0; i < n; i++) {
            int[] row = matrix[i];
            // 例如 4行， mid为2  01 和 23对换
            for (int j = 0; j < mid; j++) {
                swap(matrix, i, j, i, n - 1 - j);
            }
        }
    }

    private void swap(int[][] matrix, int i, int j, int k, int l) {
        int tmp = matrix[k][l];
        matrix[k][l] = matrix[i][j];
        matrix[i][j] = tmp;
    }

    private void swap(int[] matrix, int i, int j){
        int tmp = matrix[i];
        matrix[i] = matrix[j];
        matrix[j] = tmp;
    }
}
